package org.neo4j.smack.serialization.strategy;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collections;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.codehaus.jackson.JsonFactory;
import org.junit.Test;
import org.neo4j.graphdb.DynamicRelationshipType;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.smack.serialization.JsonSerializer;
public class TestRelationshipSerializationStrategy {
@Test
public void shouldSerializeRelationshipWithNoProperties() {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
JsonSerializer serializer = new JsonSerializer(new JsonFactory(), buffer);
Node fromNode = mock(Node.class);
when(fromNode.getId()).thenReturn(0l);
Node toNode = mock(Node.class);
when(toNode.getId()).thenReturn(1l);
Relationship mockRel = mock(Relationship.class);
when(mockRel.getId()).thenReturn(0l);
when(mockRel.getType()).thenReturn(DynamicRelationshipType.withName("LOVES"));
when(mockRel.getStartNode()).thenReturn(fromNode);
when(mockRel.getEndNode()).thenReturn(toNode);
when(mockRel.getPropertyKeys()).thenReturn(Collections.<String> emptyList());
RelationshipSerializationStrategy strategy = new RelationshipSerializationStrategy();
strategy.serialize(mockRel, serializer);
serializer.flush();
assertThat(new String(buffer.toByteArray()),is("{" +
"\"self\":\"/db/data/relationship/0\"," +
"\"type\":\"LOVES\"," +
"\"start\":\"/db/data/node/0\"," +
"\"end\":\"/db/data/node/1\"," +
"\"data\":{}," +
"\"extensions\":{}" +
"}"));
}
@Test
public void shouldSerializeNodeWithProperties() {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
JsonSerializer serializer = new JsonSerializer(new JsonFactory(), buffer);
Node fromNode = mock(Node.class);
when(fromNode.getId()).thenReturn(0l);
Node toNode = mock(Node.class);
when(toNode.getId()).thenReturn(1l);
Relationship mockRel = mock(Relationship.class);
when(mockRel.getId()).thenReturn(0l);
when(mockRel.getType()).thenReturn(DynamicRelationshipType.withName("LOVES"));
when(mockRel.getStartNode()).thenReturn(fromNode);
when(mockRel.getEndNode()).thenReturn(toNode);
when(mockRel.getPropertyKeys()).thenReturn(new ArrayList<String>() {
private static final long serialVersionUID = 1248180220593789023L;
{
add("name");
add("age");
add("favorite_numbers");
}});
when(mockRel.getProperty("name")).thenReturn("bob");
when(mockRel.getProperty("age")).thenReturn(12);
when(mockRel.getProperty("favorite_numbers")).thenReturn(new int [] {1,2,3});
RelationshipSerializationStrategy strategy = new RelationshipSerializationStrategy();
strategy.serialize(mockRel, serializer);
serializer.flush();
assertThat(new String(buffer.toByteArray()),is(
"{" +
"\"self\":\"/db/data/relationship/0\"," +
"\"type\":\"LOVES\"," +
"\"start\":\"/db/data/node/0\"," +
"\"end\":\"/db/data/node/1\"," +
"\"data\":{" +
"\"name\":\"bob\"," +
"\"age\":12," +
"\"favorite_numbers\":[1,2,3]" +
"}," +
"\"extensions\":{}" +
"}"));
}
}